package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;

/**
 * @author By ZengPeng
 */
public class 力扣_345_反转字符串中的元音字母 {
    //测试
    public static void main(String[] args) {
//
//        System.out.println((int)'a');
//        System.out.println((int)'A');
        System.out.println(new 力扣_345_反转字符串中的元音字母().reverseVowels("hello"));
        System.out.println(new 力扣_345_反转字符串中的元音字母().reverseVowels("leetcode"));
        System.out.println(new 力扣_345_反转字符串中的元音字母().reverseVowels("aA"));
    }

    /**
     * 题目：给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
     * 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现。
     *
     *
     * 分析：
     *      1.左右指针分别找到元音字母 ，调换位置
     *
     * 边界值 & 注意点：
     *      1.
     **/
    public String reverseVowels(String s) {
        int left =0 ,right =s.length()-1;
        char[] chars = s.toCharArray();
        while (left<right){
            char a = s.charAt(left)<97 ? (char)(s.charAt(left)+32) : s.charAt(left) ;
            if(a=='a' || a=='e' ||a=='i' ||a =='o' || a=='u'){
                while (left<right){
                    char b = s.charAt(right)<97 ? (char)(s.charAt(right)+32) : s.charAt(right) ;
                    if(b=='a' || b=='e' ||b=='i' ||b =='o' || b=='u'){
                        chars[left]^=chars[right];
                        chars[right]^=chars[left];
                        chars[left]^=chars[right];
                        right--;
                        break;
                    }
                    right--;
                }
            }
            left++;
        }
        return new String(chars);
    }
}
